<?php

/**
 * 
 * Autor				   : 	Juan Jose Muñiz Juarez
 * Fecha de Creacion	: 	29/04/2012, 12:41:50
 * Version 				: 	1.0
 * Descripcion 		:   Lee la base de datos y obtiene la informacion de todas las tablas correspondientes
 *                          para posteriormente generar las clases correspondientes
 */

   if ( !defined ( "RUTA_FISICA_SISTEMA" ) )
   {
      require_once "../../../../config/Constantes.php";
      require_once "../../../../config/ConstantesDB.php";
   }

   $ruta_sistema = RUTA_FISICA_SISTEMA . "/sistema/";
   
   require_once $ruta_sistema . "general/clases/comun/base_datos/DataBase.php";
   require_once $ruta_sistema . "general/clases/comun/generacion_modelo/GeneracionModelo.php";

class ModeloBDMySQL
   {
      private $_tablas_generar; 
      private $_generar_modelo;
      private $_modelo ;
      private $_ubicacion_modelo;
      
      /**
     * @param field_type $_ubicacion_modelo
     */
    public function setUbicacion_modelo ( $_ubicacion_modelo )
         {
            $this->_ubicacion_modelo = $_ubicacion_modelo;
        }
   
	/**
       * 
      * 
      * Nombre         	: 	__construct
      * Descripcion   	:	
      * Version 			:  	1.0
      * Autor:			:	Juan Jose Muñiz Juarez
      * Fecha y Hora		:	03/05/2012, 14:54:42
       * params: @param unknown_type $tablas_generar
       * params: @param unknown_type $generar_modelo
       * return: return_type
       */
      function __construct( $tablas_generar = "", $generar_modelo = true )
         {
            if ( $tablas_generar )
              {
                if ( strpos( $tablas_generar , "," ) !== false )
                  {
                     $this -> _tablas_generar = explode( ",", $tablas_generar );
                  }
                else
                  {
                     $this -> _tablas_generar = array( $tablas_generar );
                  }  
              }
              
            $this -> _modelo = array();  
            $this -> _generar_modelo = $generar_modelo;
            // Leemos las tablas 
            //$this -> leerTablas();
         }
         
         /**
          * 
          * Nombre         	: 	leerTablas
          * Descripcion   	:	
          * Version 			:  	1.0
          * Autor:			:	Juan Jose Muñiz Juarez
          * Fecha y Hora		:	29/04/2012, 12:41:46
          */
       private function leerTablas( )
         {
            $sql = "SHOW TABLES FROM " . BD_DATABASE;

            $resultados = DataBase::query( $sql,__CLASS__,__METHOD__,__LINE__ );
            
            if ( $resultados )
              {
                 while ( $tablas = mysql_fetch_row( $resultados ) )
                   {
                      if ( $tablas[ 0 ] )
                        {
                           $generar = true;
                           
                           if ( $this -> _tablas_generar )
                             {
                                if ( is_array( $this -> _tablas_generar ) && count( $this -> _tablas_generar ) > 0 )
                                  {
                                     $generar = in_array( strtolower( $tablas[ 0 ] ), $this -> _tablas_generar );
                                  }
                             }
                             
                           if ( $generar )
                             {
                                if ( $this -> _generar_modelo ) 
                                  {
                                     $modelo = new GeneracionModelo( "M" );
                                     
                                    
                                     $this -> obtenerCamposTabla($tablas[ 0 ], $modelo );
                                     $modelo -> generarClase( $tablas[ 0 ],  $this -> _ubicacion_modelo );
                                     
                                     //$modelo -> generarClase($nombre_clase, $ubicacion)
                                  }
                             }  
                        }
                   }
                   
                 return true;  
              }
            else
              {
                 return false;
              }  
         }
         
         /**
          * 
          * Nombre         	: 	obtenerCamposTabla
          * Descripcion   	:	
          * Version 			:  	1.0
          * Autor:			:	Juan Jose Muñiz Juarez
          * Fecha y Hora		:	06/05/2012, 13:39:35
          * @param unknown_type $tabla
          * @param unknown_type $modelo
          */
       private function obtenerCamposTabla( $tabla, $modelo, $conexion = null )
         {
           // Obtenemos las columas de la tabla
           $sql = "SHOW COLUMNS from " . $tabla;
           
           $res_campos = DataBase::query( $sql,__CLASS__,__METHOD__,__LINE__, true, $conexion );                                
           
           if ( $res_campos )
             {
                while ( $campos = mysql_fetch_row( $res_campos ) )
                  {
                     if ( $campos )
                       {
                           if ( $this -> _generar_modelo )
                             {
                               $modelo -> generarSet( $campos );
                               $modelo -> generarGet( $campos[ 0 ] );
                             }                                                                                                      
                       }
                  }
             }
         }  
         
         /**
          * 
          * Nombre         	: 	generarModelo
          * Descripcion   	:	
          * Version 		:  	1.0
          * Autor:			:	Juan Jose Muñiz Juarez
          * Fecha y Hora	:	29/04/2012, 12:41:41
          * @param unknown_type $conexion
          * @param unknown_type $tabla
          * @return GeneracionModelo
          */
       public function generarModelo( $conexion = null, $tabla = null )
         {
            if ( !$conexion )
              {
                 $this -> leerTablas( );
                 
                 return true;
              }
            else
              {
                 $modelo = new GeneracionModelo( "M" );
                 
                 $this -> obtenerCamposTabla( $tabla, $modelo, $conexion );
                 
                 //var_dump($this -> _ubicacion_modelo);
                 $nombre_modelo = $modelo -> generarClase( $tabla,  $this -> _ubicacion_modelo );
                 
                 //var_dump( "2", $modelo );
                 return true;
                 //return $nombre_modelo;
              }
              
            return false;  
         }  
   }
